package br.com.devteam.sgap.view.externo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.devteam.base.util.MailUtil;
import br.com.devteam.base.util.Message;
import br.com.devteam.base.util.SGAPContantes;
import br.com.devteam.sgap.model.Usuario;
import br.com.devteam.sgap.service.IService;

@Controller(value = "mBeanRecuperaSenha")
@Scope(value = "session")
@ManagedBean
public class MBeanRecuperaSenha {

	@Autowired
	private IService service;
	
	private MailUtil mail;
	private String email;

	private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
			+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

	public MBeanRecuperaSenha() {}
	
	public String actionCancelar() {
		return SGAPContantes.PAGE_LOGIN;
	}

	private boolean valida() {
		boolean retorno = true;
		if (email == null || email.length() < 1) {
			retorno = false;
			Message.e("email", SGAPContantes.ERROR_EMPTY_TEXT_FIELD);
		}
		if (!email.matches(EMAIL_PATTERN)) {
			retorno = false;
			Message.e("email", "E-mail inválido");
		}
	
		if (!retorno) {
			Message.e(SGAPContantes.MESSAGE_FIELD, SGAPContantes.ERROR_GENERIC);
		}

		return retorno;
	}
	
	public String actionEnviarEmail() {
		if (valida()) {

			Map<String, Object> paramsEmail = new HashMap<String, Object>();
			paramsEmail.put("email", email);
			List<Usuario> users = service.findByNamedQuery(Usuario.QUERY_EMAIL,
					paramsEmail);

			if (users.size() > 0) {
				mail = new MailUtil();
				StringBuilder msgStr = new StringBuilder();
				try {
					String msg = "Recuperando senha";
					mail.setTituloMensagem(msg);
					msgStr.append("Sua senha foi recuperada com sucesso: \n");
					msgStr.append("Usuário: " + users.get(0).getLogin());
					msgStr.append("\nSenha: " + users.get(0).getSenha());
					mail.setMensagem(msgStr.toString());
					mail.addDestinatario(email, "");
					mail.sendMail();
					Message.e("email", SGAPContantes.SEND_EMAIL + email);
				} catch (Exception e) {
					e.printStackTrace();
					Message.e("message_top",
							"Houve um erro ao enviar o e-mail, por favor tente novamente.");
				}
			}
		}

		return "";

	}

	public MailUtil getMail() {
		return mail;
	}

	public void setMail(MailUtil mail) {
		this.mail = mail;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}
